import pandas as pd

# 创建示例DataFrame，使用英文列名和中文值
data = {
    'Name': ['张三', '李四', '王五', '赵六', '钱七'],
    'Age': [25, 30, 35, 40, 28],
    'City': ['北京', '上海', '广州', '深圳', '杭州'],
    'Department': ['技术部', '销售部', '技术部', '人事部', '财务部'],
    'Salary': [50000, 70000, 80000, 90000, 60000]
}
df = pd.DataFrame(data, index=['A001', 'A002', 'A003', 'A004', 'A005'])
print("原始DataFrame:")
print(df)
print("\n" + "="*60 + "\n")

# 1. 选择单行（按行标签）
print("1. 选择单行 (行标签'A002'):")
single_row = df.loc['A002']  # 按行标签选择单行
print(single_row)
print("\n" + "-"*40 + "\n")

# 2. 选择多行（按行标签列表）
print("2. 选择多行 (行标签['A001', 'A003']):")
multiple_rows = df.loc[['A001', 'A003']]  # 按行标签列表选择多行
print(multiple_rows)
print("\n" + "-"*40 + "\n")

# 3. 选择行范围（切片，包含结束标签）
print("3. 选择行范围 (行标签'A002'到'A004'，包含结束标签):")
row_slice = df.loc['A002':'A004']  # 切片选择行范围，包含结束标签
print(row_slice)
print("\n" + "-"*40 + "\n")

# 4. 选择单列
print("4. 选择单列 ('City'列):")
single_column = df.loc[:, 'City']  # 选择单列
print(single_column)
print("\n" + "-"*40 + "\n")

# 5. 选择多列
print("5. 选择多列 (['Name', 'Department']列):")
multiple_columns = df.loc[:, ['Name', 'Department']]  # 按列标签列表选择多列
print(multiple_columns)
print("\n" + "-"*40 + "\n")

# 6. 选择列范围（切片，包含结束标签）
print("6. 选择列范围 ('Name'到'City'列，包含结束标签):")
column_slice = df.loc[:, 'Name':'City']  # 切片选择列范围，包含结束标签
print(column_slice)
print("\n" + "-"*40 + "\n")

# 7. 选择特定行和列的组合
print("7. 选择特定行和列 (行['A001','A003']，列['Name','Age']):")
subset = df.loc[['A001', 'A003'], ['Name', 'Age']]  # 同时选择特定行和列
print(subset)
print("\n" + "-"*40 + "\n")

# 8. 使用条件选择行
print("8. 选择年龄大于30的员工:")
condition_age = df.loc[df['Age'] > 30]  # 使用条件选择行
print(condition_age)
print("\n" + "-"*40 + "\n")

# 9. 多条件选择（使用&、|运算符）
print("9. 选择技术部且年龄大于30的员工:")
multi_condition = df.loc[(df['Department'] == '技术部') & (df['Age'] > 30)]  # 多条件选择
print(multi_condition)
print("\n" + "-"*40 + "\n")

# 10. 条件选择特定列
print("10. 选择工资大于60000的员工姓名和部门:")
conditional_columns = df.loc[df['Salary'] > 60000, ['Name', 'Department']]  # 条件选择特定列
print(conditional_columns)
print("\n" + "-"*40 + "\n")

# 11. 修改数据
print("11. 修改数据 (将员工A001的工资改为55000):")
df.loc['A001', 'Salary'] = 55000  # 修改单个值
print("修改后的DataFrame:")
print(df.loc[['A001'], ['Name', 'Salary']])  # 显示修改结果
print("\n" + "-"*40 + "\n")

# 12. 条件修改数据
print("12. 将技术部所有员工的工资增加5000:")
df.loc[df['Department'] == '技术部', 'Salary'] += 5000  # 条件修改数据
print("修改后的技术部员工数据:")
print(df.loc[df['Department'] == '技术部', ['Name', 'Department', 'Salary']])
print("\n" + "-"*40 + "\n")

# 13. 添加新行
print("13. 添加新员工:")
df.loc['A006'] = ['孙八', 32, '成都', '市场部', 75000]  # 添加新行
print("添加新行后的DataFrame:")
print(df)
print("\n" + "-"*40 + "\n")

# 14. 使用函数选择数据
print("14. 使用lambda函数选择年龄最大的3名员工:")
top3_oldest = df.loc[lambda x: x['Age'].nlargest(3).index]  # 使用lambda函数选择
print(top3_oldest)
print("\n" + "-"*40 + "\n")

# 15. 综合示例：复杂条件选择
print("15. 综合示例：选择北上广深且工资在60000-85000之间的员工:")
complex_selection = df.loc[
    (df['City'].isin(['北京', '上海', '广州', '深圳'])) & 
    (df['Salary'] >= 60000) & 
    (df['Salary'] <= 85000),
    ['Name', 'City', 'Department', 'Salary']
]
print(complex_selection)

print("\n" + "="*60)
print("loc方法使用总结:")
print("✓ 基于标签索引（行/列名称）")
print("✓ 切片包含结束位置（闭区间）")
print("✓ 支持单行/列、多行/列、条件选择")
print("✓ 支持数据修改和添加新行")
print("✓ 可与lambda函数结合使用")